package untiring07_HelloJDBC;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class J01_HelloJDBC {

	// JDBC
	// 데이터베이스에 접근하고 조작하는 것은 아주 중요한 주제중의 하나임
	//
	// 데이터베이스에는 여러 브랜드가 있음
	// Oracle, MySQL,MSSQL등등
	// 모든 데이터 베이스 서버는 독점적인 방식을 통해 접근하고 관리하도록 허용됨
	// 따라서, 각각의 데이터 베이스에 접근하려면 각 브랜드가 제공하는기술만을 사용해야함
	//
	// 운좋게도 자바에서는 서로 다른 데이텁이스에 통일된 방식으로 접근하게 하는 JDBC를 제공함
	// Java 7은 JDBC4.1을 제공
	// JDBC Core API : java.sql패키지
	// JDBC Optional API :javax.sql 패키지
	// JDBC Driver
	// 데이터베이스 제조사가 제공하는 라이브러리
	// 각 제조사는 자신만의 독점적인 기술을 이 라이브러리에 포함시켜 둠
	// 이것을 JDBC API라는 통일된 코드를 이용해서 데이터베이스를 제어할 수 있음
	//
	// 데이터베이스 접근 5단계
	// 1.데이터베이스에 접근하기 위해 JDBC드라이버 불러오기
	// 2.데이터베이스 연결 얻기
	// 3.실행할 SQL문장을 만들기 위해
	// Statement/PreparedStatement 객체 생성
	// 4.SQL문장을 실행하고 데이터베이스로부터 넘어온 결과를 처리하기 위해
	// ResultSet객체를 생성
	// 5.모든 처리가 끝나면 JDBC자원 해제
	//
	// Oracle JDBC 드라이버 등록
	// ojdbc.jar를 라이브러리로 등록
	// Build Path -> add external archives
	//
	//

	public static void main(String[] args) {
		// 오라클 데이터베이스 연결정보
		final String DRV = "oracle.jdbc.driver.OracleDriver";
		final String URL = "jdbc:oracle:thin:@112.216.253.125:1521:xe";
		final String USR = "untiring07";
		final String PWD = "untiring07";

		// MySQL 데이터베이스 연결정보
		// DRV = "com.mysql.jdbc.Driver"
		// URL = "jdbc:mysql://112.216.253.125:3306/zipcode"
		// USR = "zipcode"
		// PWD = "zipcode"

		// 데이터베이스 작업용 객체정의
		Connection conn = null; // 연결
		PreparedStatement pstmt = null; // 질의
		ResultSet rs = null; // 결과
		String SQL = "select *from employees ";
		// JDBC 광련코드 작성시 예외처리를 위해
		// try -catch -finally 를 작성할것

		try {
			// 1.JDBC 드라이버 불러오기
			// Class ; 클래스에 대한 객체를 동적으로 생성
			Class.forName(DRV);
			// 2.데이터 베이스 연결
			conn = DriverManager.getConnection(URL, USR, PWD);
			// 3.실행할 SQL질의 작성
			pstmt = conn.prepareStatement(SQL);
			// 4a. SQL 질의를 실행하고 결과를 받음
			rs = pstmt.executeQuery();
			// 4b. 받은 결과 처리
			if (rs.next()) {	// 결과에 데이터가 존재하면
				do { 			// 출력할 데이터가 있으면
								//rs.getXxx():ResultSet 객체에서 데이터를 가져옴
					System.out.print(rs.getString("employee_id"));
					System.out.print("/");
					System.out.println(rs.getString(4)); // email
				} while (rs.next());

			} else { // 결과에 데이터가 없으면
				System.out.println("데이터가 없어영~");
			}

		} catch (Exception ex) {
			ex.printStackTrace();
		} finally {
			// 5.JDBC 객체 해제
			if (rs != null)
				try {
					rs.close();
					rs = null;
				} catch (Exception e) {
				}
			if (pstmt != null)
				try {
					pstmt.close();
					pstmt = null;
				} catch (Exception e) {
				}
			if (conn != null)
				try {
					conn.close();
					conn = null;
				} catch (Exception e) {
				}

		}

	}

}
